home *** CD-ROM | disk | FTP | other *** search
/ Almathera Ten Pack 3: CDPD 3 / Almathera Ten on Ten - Disc 3: CDPD3.iso / fish / 701-725 / 708 / intuisup / intuisup42.lha / Intuisup / source.lha / Editor / req.c < prev    next >
C/C++ Source or Header  |  1992-06-22  |  10KB  |  310 lines

  1. /* $Revision Header *** Header built automatically - do not edit! ***********
  2.  *
  3.  *    (C) Copyright 1991 by Torsten Jürgeleit
  4.  *
  5.  *    Name .....: req.c
  6.  *    Created ..: Sunday 22-Dec-91 21:23:00
  7.  *    Revision .: 1
  8.  *
  9.  *    Date        Author                 Comment
  10.  *    =========   ====================   ====================
  11.  *    22-Jun-92   Torsten Jürgeleit      draw raster in about requester
  12.  *    22-Dec-91   Torsten Jürgeleit      Created this file!
  13.  *
  14.  ****************************************************************************
  15.  *
  16.  *    Requester part
  17.  *
  18.  * $Revision Header ********************************************************/
  19.  
  20.     /* Includes */
  21.  
  22. #include "includes.h"
  23. #include "defines.h"
  24. #include "imports.h"
  25. #include "protos.h"
  26.  
  27.     /* Defines for error requester */
  28.  
  29. #define ERROR_WINDOW_TITLE    " Error "
  30.  
  31.     /* Statics for error requester */
  32.  
  33. STATIC BYTE *error_text[] = {
  34.    "Can't open arp.library v39+",
  35.    "Can't open intuisup.library",
  36.    "Can't open window",
  37.    "Out of memory",
  38.    "Can't open file",
  39.    "Error while saving",
  40.    "Error while reading",
  41.    "Line in load file too long",
  42.    "Missing argument in load file",
  43.    "Different block types for BEGIN and END in load file",
  44.    "Invalid font"
  45. };
  46.     /* Defines for continue, ok/cancel requester */
  47.  
  48. #define AUTO_REQ_REQ_FLAGS    (AUTO_REQ_FLAG_BACK_FILL | AUTO_REQ_FLAG_TEXT_CENTER | AUTO_REQ_FLAG_TEXT_COLOR2 | AUTO_REQ_FLAG_HOTKEY | AUTO_REQ_FLAG_MOVE_POINTER_NEG | AUTO_REQ_FLAG_DRAW_RASTER)
  49.  
  50.     /* Defines for about requester */
  51.  
  52. #define ABOUT_REQ_WIDTH        304
  53. #define ABOUT_REQ_HEIGHT    106
  54. #define ABOUT_REQ_FLAGS        (REQ_DATA_FLAG_BACK_FILL | REQ_DATA_FLAG_CENTER | REQ_DATA_FLAG_INNER_WINDOW | REQ_DATA_FLAG_DRAG_GADGET | REQ_DATA_FLAG_DEPTH_GADGET | REQ_DATA_FLAG_DRAW_RASTER)
  55. #define ABOUT_REQ_TITLE        " About "
  56.  
  57. #define ABOUT_TEXT1_TYPE    TEXT_DATA_TYPE_TEXT
  58. #define ABOUT_TEXT1_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_BOLD)
  59. #define ABOUT_TEXT1_LEFT_EDGE    0
  60. #define ABOUT_TEXT1_TOP_EDGE    (ABOUT_BORDER_TOP_EDGE + 7)
  61. #define ABOUT_TEXT1_TEXT    "Template Editor v1.2"
  62. #define ABOUT_TEXT1_TEXT_ATTR    &topaz60_attr
  63.  
  64. #define ABOUT_TEXT2_TYPE    TEXT_DATA_TYPE_TEXT
  65. #define ABOUT_TEXT2_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  66. #define ABOUT_TEXT2_LEFT_EDGE    0
  67. #define ABOUT_TEXT2_TOP_EDGE    (ABOUT_TEXT1_TOP_EDGE + 15)
  68. #define ABOUT_TEXT2_TEXT    "© 06/92 by Torsten Jürgeleit    "
  69. #define ABOUT_TEXT2_TEXT_ATTR    &topaz80_attr
  70.  
  71. #define ABOUT_TEXT3_TYPE    TEXT_DATA_TYPE_TEXT
  72. #define ABOUT_TEXT3_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  73. #define ABOUT_TEXT3_LEFT_EDGE    0
  74. #define ABOUT_TEXT3_TOP_EDGE    (ABOUT_TEXT2_TOP_EDGE + 10)
  75. #define ABOUT_TEXT3_TEXT    "           Am Sandberg 4        "
  76. #define ABOUT_TEXT3_TEXT_ATTR    &topaz80_attr
  77.  
  78. #define ABOUT_TEXT4_TYPE    TEXT_DATA_TYPE_TEXT
  79. #define ABOUT_TEXT4_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  80. #define ABOUT_TEXT4_LEFT_EDGE    0
  81. #define ABOUT_TEXT4_TOP_EDGE    (ABOUT_TEXT3_TOP_EDGE + 10)
  82. #define ABOUT_TEXT4_TEXT    "           W-5270 Gummersbach   "
  83. #define ABOUT_TEXT4_TEXT_ATTR    &topaz80_attr
  84.  
  85. #define ABOUT_TEXT5_TYPE    TEXT_DATA_TYPE_TEXT
  86. #define ABOUT_TEXT5_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  87. #define ABOUT_TEXT5_LEFT_EDGE    0
  88. #define ABOUT_TEXT5_TOP_EDGE    (ABOUT_TEXT4_TOP_EDGE + 10)
  89. #define ABOUT_TEXT5_TEXT    "           Germany              "
  90. #define ABOUT_TEXT5_TEXT_ATTR    &topaz80_attr
  91.  
  92. #define ABOUT_TEXT6_TYPE    TEXT_DATA_TYPE_TEXT
  93. #define ABOUT_TEXT6_FLAGS    (TEXT_DATA_FLAG_CENTER | TEXT_DATA_FLAG_COLOR2)
  94. #define ABOUT_TEXT6_LEFT_EDGE    0
  95. #define ABOUT_TEXT6_TOP_EDGE    (ABOUT_TEXT5_TOP_EDGE + 10)
  96. #define ABOUT_TEXT6_TEXT    "           Phone ++49 2261 27400"
  97. #define ABOUT_TEXT6_TEXT_ATTR    &topaz80_attr
  98.  
  99. #define ABOUT_BORDER_TYPE    BORDER_DATA_TYPE_BOX2_OUT
  100. #define ABOUT_BORDER_LEFT_EDGE    10
  101. #define ABOUT_BORDER_TOP_EDGE    5
  102. #define ABOUT_BORDER_WIDTH    (ABOUT_REQ_WIDTH - 2 * ABOUT_BORDER_LEFT_EDGE)
  103. #define ABOUT_BORDER_HEIGHT    (ABOUT_REQ_HEIGHT - (3 * ABOUT_BORDER_TOP_EDGE + ABOUT_GADGET_HEIGHT))
  104.  
  105. #define ABOUT_GADGET_TYPE    GADGET_DATA_TYPE_BUTTON
  106. #define ABOUT_GADGET_FLAGS    (GADGET_DATA_FLAG_HOTKEY | GADGET_DATA_FLAG_MOVE_POINTER)
  107. #define ABOUT_GADGET_TEXT    "_Continue"
  108. #define ABOUT_GADGET_LEFT_EDGE    ((ABOUT_REQ_WIDTH - ABOUT_GADGET_WIDTH) / 2)
  109. #define ABOUT_GADGET_TOP_EDGE    (ABOUT_REQ_HEIGHT - ABOUT_GADGET_HEIGHT - 5)
  110. #define ABOUT_GADGET_WIDTH    ((8 + 2) * 8)
  111. #define ABOUT_GADGET_HEIGHT    15
  112. #define ABOUT_GADGET_TEXT_ATTR    &topaz80_attr
  113.  
  114.     /* Statics for about requester */
  115.  
  116. STATIC struct TextData  about_text_data[] = {
  117.    {
  118.     ABOUT_TEXT1_TYPE,    /* td_Type */
  119.     ABOUT_TEXT1_FLAGS,    /* td_Flags */
  120.     ABOUT_TEXT1_LEFT_EDGE,    /* td_LeftEdge */
  121.     ABOUT_TEXT1_TOP_EDGE,    /* td_TopEdge */
  122.     ABOUT_TEXT1_TEXT,    /* *td_Text */
  123.     ABOUT_TEXT1_TEXT_ATTR    /* *td_TextAttr */
  124.    }, {
  125.     ABOUT_TEXT2_TYPE,    /* td_Type */
  126.     ABOUT_TEXT2_FLAGS,    /* td_Flags */
  127.     ABOUT_TEXT2_LEFT_EDGE,    /* td_LeftEdge */
  128.     ABOUT_TEXT2_TOP_EDGE,    /* td_TopEdge */
  129.     ABOUT_TEXT2_TEXT,    /* *td_Text */
  130.     ABOUT_TEXT2_TEXT_ATTR    /* *td_TextAttr */
  131.    }, {
  132.     ABOUT_TEXT3_TYPE,    /* td_Type */
  133.     ABOUT_TEXT3_FLAGS,    /* td_Flags */
  134.     ABOUT_TEXT3_LEFT_EDGE,    /* td_LeftEdge */
  135.     ABOUT_TEXT3_TOP_EDGE,    /* td_TopEdge */
  136.     ABOUT_TEXT3_TEXT,    /* *td_Text */
  137.     ABOUT_TEXT3_TEXT_ATTR    /* *td_TextAttr */
  138.    }, {
  139.     ABOUT_TEXT4_TYPE,    /* td_Type */
  140.     ABOUT_TEXT4_FLAGS,    /* td_Flags */
  141.     ABOUT_TEXT4_LEFT_EDGE,    /* td_LeftEdge */
  142.     ABOUT_TEXT4_TOP_EDGE,    /* td_TopEdge */
  143.     ABOUT_TEXT4_TEXT,    /* *td_Text */
  144.     ABOUT_TEXT4_TEXT_ATTR    /* *td_TextAttr */
  145.    }, {
  146.     ABOUT_TEXT5_TYPE,    /* td_Type */
  147.     ABOUT_TEXT5_FLAGS,    /* td_Flags */
  148.     ABOUT_TEXT5_LEFT_EDGE,    /* td_LeftEdge */
  149.     ABOUT_TEXT5_TOP_EDGE,    /* td_TopEdge */
  150.     ABOUT_TEXT5_TEXT,    /* *td_Text */
  151.     ABOUT_TEXT5_TEXT_ATTR    /* *td_TextAttr */
  152.    }, {
  153.     ABOUT_TEXT6_TYPE,    /* td_Type */
  154.     ABOUT_TEXT6_FLAGS,    /* td_Flags */
  155.     ABOUT_TEXT6_LEFT_EDGE,    /* td_LeftEdge */
  156.     ABOUT_TEXT6_TOP_EDGE,    /* td_TopEdge */
  157.     ABOUT_TEXT6_TEXT,    /* *td_Text */
  158.     ABOUT_TEXT6_TEXT_ATTR    /* *td_TextAttr */
  159.    }, {
  160.     INTUISUP_DATA_END    /* mark end of text data array */
  161.    }
  162. };
  163. STATIC struct BorderData  about_border_data[] = {
  164.    {
  165.     ABOUT_BORDER_TYPE,    /* bd_Type */
  166.     ABOUT_BORDER_LEFT_EDGE,    /* bd_LeftEdge */
  167.     ABOUT_BORDER_TOP_EDGE,    /* bd_TopEdge */
  168.     ABOUT_BORDER_WIDTH,    /* bd_Width */
  169.     ABOUT_BORDER_HEIGHT    /* bd_Height */
  170.    }, {
  171.     INTUISUP_DATA_END    /* mark end of border data array */
  172.    }
  173. };
  174. STATIC struct GadgetData  about_gadget_data[] = {
  175.    {
  176.     ABOUT_GADGET_TYPE,    /* gd_Type */
  177.     ABOUT_GADGET_FLAGS,    /* gd_Flags */
  178.     ABOUT_GADGET_LEFT_EDGE,    /* gd_LeftEdge */
  179.     ABOUT_GADGET_TOP_EDGE,    /* gd_TopEdge */
  180.     ABOUT_GADGET_WIDTH,    /* gd_Width */
  181.     ABOUT_GADGET_HEIGHT,    /* gd_Height */
  182.     ABOUT_GADGET_TEXT,    /* *gd_Text */
  183.     ABOUT_GADGET_TEXT_ATTR,    /* *gd_TextAttr */
  184.     { 0, 0, 0 }
  185.    }, {
  186.     INTUISUP_DATA_END    /* mark end of gadget data */
  187.    }
  188. };
  189. STATIC struct RequesterData  about_requester_data = {
  190.     0,            /* rd_LeftEdge */
  191.     0,            /* rd_TopEdge */
  192.     ABOUT_REQ_WIDTH,    /* rd_Width */
  193.     ABOUT_REQ_HEIGHT,    /* rd_Height */
  194.     ABOUT_REQ_FLAGS,    /* rd_Flags */
  195.     ABOUT_REQ_TITLE,    /* *rd_Title */
  196.     &about_text_data[0],    /* *rd_Texts */
  197.     &about_border_data[0],    /* *rd_Borders */
  198.     &about_gadget_data[0]    /* *rd_Gadgets */
  199. };
  200.     /* Show error message as continue requester */
  201.  
  202.    SHORT
  203. show_error(SHORT status)
  204. {
  205.    BYTE *error;
  206.  
  207.    if (status < EDITOR_STATUS_NORMAL) {
  208.       error = error_text[-(status + 1)];
  209.       if (IntuiSupBase && ewin) {
  210.      continue_requester(ERROR_WINDOW_TITLE, error);
  211.       } else {
  212.      if (IntuitionBase) {
  213.         intuition_error_requester(error);
  214.      }
  215.       }
  216.       status = EDITOR_STATUS_ERROR;
  217.    }
  218.    return(status);
  219. }
  220.     /* Show IntuiSup continue requester */
  221.  
  222.    VOID
  223. continue_requester(BYTE *title, BYTE *text)
  224. {
  225.    IAutoRequest(ewin, title, text, "_Continue", NULL, 0L, 0L,
  226.                           AUTO_REQ_REQ_FLAGS, NULL);
  227. }
  228.     /* Show Intuition error requester */
  229.  
  230.    STATIC VOID
  231. intuition_error_requester(BYTE *text)
  232. {
  233.    struct Screen     screen, *scr = &screen;
  234.    struct IntuiText  itext_error, itext_ok;
  235.    USHORT border_left, border_top, width, height, max_width;
  236.  
  237.    /* Get screen dimension */
  238.    GetScreenData((BYTE *)scr, (LONG)sizeof(struct Screen),
  239.                         (LONG)WBENCHSCREEN, (LONG)NULL);
  240.    border_left = scr->BarHeight - scr->BarVBorder + scr->WBorTop;
  241.    border_top  = scr->WBorTop;
  242.  
  243.    /* Init message text */
  244.    itext_error.LeftEdge  = border_left;
  245.    itext_error.TopEdge   = border_top + 4;
  246.    itext_error.DrawMode  = JAM1;
  247.    itext_error.FrontPen  = 2;
  248.    itext_error.IText     = (UBYTE *)text;
  249.    itext_error.ITextFont = &topaz80_attr;
  250.    itext_error.NextText  = NULL;
  251.    max_width             = IntuiTextLength(&itext_error);
  252.  
  253.    /* Init ok text */
  254.    itext_ok.LeftEdge  = 6;
  255.    itext_ok.TopEdge   = 4;
  256.    itext_ok.DrawMode  = JAM1;
  257.    itext_ok.FrontPen  = 3;
  258.    itext_ok.ITextFont = &topaz60_attr;
  259.    itext_ok.IText     = (UBYTE *)"Ok";
  260.    itext_ok.NextText  = NULL;
  261.    if ((width = IntuiTextLength(&itext_ok) + 2 * 16) * 2 > max_width) {
  262.       max_width = width;
  263.    }
  264.  
  265.    /* Calc requester dimension and scale it if neccessary */
  266.    width = max_width + border_left + scr->WBorRight + 2 * 16;
  267.    if (width > scr->Width) {
  268.       width = scr->Width;
  269.    }
  270.    height = border_top + scr->WBorBottom + 8 + 10 + 9 + 2 * 8 + 2 * 4;
  271.    if (height > scr->Height) {
  272.       height = scr->Height;
  273.    }
  274.    AutoRequest((LONG)NULL, &itext_error, &itext_ok, &itext_ok, 0L, 0L,
  275.                          (LONG)width, (LONG)height);
  276. }
  277.     /* Show about requester */
  278.  
  279.    VOID
  280. about_requester(VOID)
  281. {
  282.    APTR rl;
  283.  
  284.    if (rl = IDisplayRequester(ewin, &about_requester_data, NULL)) {
  285.       struct MsgPort  *up = ewin->UserPort;
  286.       BOOL keepon = TRUE;
  287.  
  288.       do {
  289.      struct IntuiMessage  *msg;
  290.  
  291.      WaitPort(up);
  292.      while (msg = IGetMsg(up)) {
  293.         if (msg->Class == ISUP_ID) {
  294.            keepon = FALSE;
  295.         }
  296.         IReplyMsg(msg);
  297.      }
  298.       } while (keepon == TRUE);
  299.       IRemoveRequester(rl);
  300.    }
  301. }
  302.     /* Show IntuiSup ok/cancel requester */
  303.  
  304.    BOOL
  305. ok_cancel_requester(BYTE *title, BYTE *text)
  306. {
  307.    return(IAutoRequest(ewin, title, text, "_Ok", "_Cancel", 0L, 0L,
  308.                          AUTO_REQ_REQ_FLAGS, NULL));
  309. }
  310.